ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / feature / settings / src / commonMain / kotlin / org / meshtastic / feature / settings / radio / component / TAKConfigItemList.kt
Displaying Raw β’ Download
feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigItemList.kt 2d20cd8a4708e2ef66e98d5259f3a97ec93f240a (2d20cd8a) Text, 15.38 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffModifierMissingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffParameterNamingTa5d6ff"Tb4b4b4)
Tff7b72package T7ee787org.meshtastic.feature.settings.radio.component
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.CircularProgressIndicator
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3Api
Tff7b72import T7ee787androidx.compose.material3.HorizontalDivider
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.IconButton
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.Scaffold
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.material3.TopAppBar
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.rememberCoroutineScope
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.lifecycle.compose.collectAsStateWithLifecycle
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.koin.compose.koinInject
Tff7b72import T7ee787org.meshtastic.core.common.BuildConfigProvider
Tff7b72import T7ee787org.meshtastic.core.model.getColorFrom
Tff7b72import T7ee787org.meshtastic.core.model.getStringResFrom
Tff7b72import T7ee787org.meshtastic.core.repository.CommandSender
Tff7b72import T7ee787org.meshtastic.core.repository.TakPrefs
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.back
Tff7b72import T7ee787org.meshtastic.core.resources.export_tak_data_package
Tff7b72import T7ee787org.meshtastic.core.resources.tak
Tff7b72import T7ee787org.meshtastic.core.resources.tak_config
Tff7b72import T7ee787org.meshtastic.core.resources.tak_role
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_enabled
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_enabled_desc
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_export_data_package_desc
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_loading
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_section
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_card_title
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_idle
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_result_bytes
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_result_unknown_error
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_results
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_run
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_running
Tff7b72import T7ee787org.meshtastic.core.resources.tak_team
Tff7b72import T7ee787org.meshtastic.core.takserver.TAKDataPackageGenerator
Tff7b72import T7ee787org.meshtastic.core.takserver.TakMeshTestRunner
Tff7b72import T7ee787org.meshtastic.core.takserver.TakTestResult
Tff7b72import T7ee787org.meshtastic.core.ui.component.DropDownPreference
Tff7b72import T7ee787org.meshtastic.core.ui.component.SwitchPreference
Tff7b72import T7ee787org.meshtastic.core.ui.component.TitledCard
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ArrowBack
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.PlayArrow
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Share
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.RadioConfigViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.RebootBehavior
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.ResponseState
Tff7b72import T7ee787org.meshtastic.feature.settings.tak.TakPermissionHandler
Tff7b72import T7ee787org.meshtastic.feature.settings.tak.rememberDataPackageExporter
Tff7b72import T7ee787org.meshtastic.proto.MemberRole
Tff7b72import T7ee787org.meshtastic.proto.ModuleConfig
Tff7b72import T7ee787org.meshtastic.proto.Team
T8b949e// ββ TAK Config Screen (Module Settings) βββββββββββββββββββββββββββββββββββββ
T8b949e// Shows only the firmware module config: team and role dropdowns.
Tf0883e@Composable
Tff7b72fun Td2a8ffTAKConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4: Te6edf3RadioConfigViewModelTb4b4b4, Te6edf3onBackTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3state Tff7b72by Te6edf3viewModelTb4b4b4.Te6edf3radioConfigStateTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3takConfig Tff7b72= Te6edf3stateTb4b4b4.Te6edf3moduleConfigTb4b4b4.Te6edf3tak Tff7b72?: Te6edf3ModuleConfigTb4b4b4.Te6edf3TAKConfigTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3formState Tff7b72= Te6edf3rememberConfigStateTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3takConfigTb4b4b4)
Te6edf3LaunchedEffectTb4b4b4(Te6edf3takConfigTb4b4b4) Tb4b4b4{ Te6edf3formStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3takConfig Tb4b4b4}
Tff7b72val Te6edf3effectiveResponseState Tff7b72=
Tff7b72when Tb4b4b4(Te6edf3stateTb4b4b4.Te6edf3responseStateTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3ResponseStateTb4b4b4.Te6edf3Loading Tff7b72-Tff7b72> Te6edf3ResponseStateTb4b4b4.Te6edf3Empty
Tff7b72else Tff7b72-Tff7b72> Te6edf3stateTb4b4b4.Te6edf3responseState
Tb4b4b4}
Te6edf3RadioConfigScreenListTb4b4b4(
Te6edf3rebootBehavior Tff7b72= Te6edf3RebootBehaviorTb4b4b4.Te6edf3ALWAYSTb4b4b4,
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3takTb4b4b4)Tb4b4b4,
Te6edf3onBack Tff7b72= Te6edf3onBackTb4b4b4,
Te6edf3configState Tff7b72= Te6edf3formStateTb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3stateTb4b4b4.Te6edf3connectedTb4b4b4,
Te6edf3responseState Tff7b72= Te6edf3effectiveResponseStateTb4b4b4,
Te6edf3onDismissPacketResponse Tff7b72= Te6edf3viewModelTff7b72::Te6edf3clearPacketResponseTb4b4b4,
Te6edf3onSave Tff7b72= Tb4b4b4{
Tff7b72val Te6edf3config Tff7b72= Te6edf3ModuleConfigTb4b4b4(Te6edf3tak Tff7b72= Tffa657itTb4b4b4)
Te6edf3viewModelTb4b4b4.Te6edf3setModuleConfigTb4b4b4(Te6edf3configTb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3item Tb4b4b4{
Te6edf3TakConfigCardTb4b4b4(
Te6edf3team Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3teamTb4b4b4,
Te6edf3role Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3roleTb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3stateTb4b4b4.Te6edf3connectedTb4b4b4,
Te6edf3onTeamSelected Tff7b72= Tb4b4b4{ Te6edf3formStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3team Tff7b72= Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onRoleSelected Tff7b72= Tb4b4b4{ Te6edf3formStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3role Tff7b72= Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/** Stateless TAK team/role config card β previewable without DI. */
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTakConfigCardTb4b4b4(
Te6edf3teamTb4b4b4: Te6edf3TeamTb4b4b4,
Te6edf3roleTb4b4b4: Te6edf3MemberRoleTb4b4b4,
Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onTeamSelectedTb4b4b4: Tb4b4b4(Te6edf3TeamTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onRoleSelectedTb4b4b4: Tb4b4b4(Te6edf3MemberRoleTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TitledCardTb4b4b4(Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_configTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3DropDownPreferenceTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_teamTb4b4b4)Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3enabledTb4b4b4,
Te6edf3selectedItem Tff7b72= Te6edf3teamTb4b4b4,
Te6edf3itemLabel Tff7b72= Tb4b4b4{ Te6edf3stringResourceTb4b4b4(Te6edf3getStringResFromTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3itemColor Tff7b72= Tb4b4b4{ Te6edf3ColorTb4b4b4(Te6edf3getColorFromTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onItemSelected Tff7b72= Te6edf3onTeamSelectedTb4b4b4,
Tb4b4b4)
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3DropDownPreferenceTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_roleTb4b4b4)Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3enabledTb4b4b4,
Te6edf3selectedItem Tff7b72= Te6edf3roleTb4b4b4,
Te6edf3itemLabel Tff7b72= Tb4b4b4{ Te6edf3stringResourceTb4b4b4(Te6edf3getStringResFromTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onItemSelected Tff7b72= Te6edf3onRoleSelectedTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// ββ TAK Server Screen (Settings β Advanced) βββββββββββββββββββββββββββββββββ
T8b949e// App-local TAK server controls: enable/disable, export data package, debug test harness.
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffTakServerScreenTb4b4b4(Te6edf3onBackTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3takPrefsTb4b4b4: Te6edf3TakPrefs Tff7b72= Te6edf3koinInjectTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isTakServerEnabled Tff7b72by Te6edf3takPrefsTb4b4b4.Te6edf3isTakServerEnabledTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3exportLauncher Tff7b72= Te6edf3rememberDataPackageExporter Tb4b4b4{ Te6edf3TAKDataPackageGeneratorTb4b4b4.Te6edf3generateDataPackageTb4b4b4(Tb4b4b4) Tb4b4b4}
Te6edf3TakPermissionHandlerTb4b4b4(
Te6edf3isTakServerEnabled Tff7b72= Te6edf3isTakServerEnabledTb4b4b4,
Te6edf3onPermissionResult Tff7b72= Tb4b4b4{ Te6edf3granted Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3granted Tff7b72&Tff7b72& Te6edf3isTakServerEnabledTb4b4b4) Tb4b4b4{
Te6edf3takPrefsTb4b4b4.Te6edf3setTakServerEnabledTb4b4b4(Tff7b72falseTb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3ScaffoldTb4b4b4(
Te6edf3topBar Tff7b72= Tb4b4b4{
Te6edf3TopAppBarTb4b4b4(
Te6edf3title Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_serverTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onBackTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3backTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3isTakServerEnabledTb4b4b4) Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3exportLauncherTb4b4b4(Ta5d6ff"Ta5d6ffMeshtastic_TAK_Server.zipTa5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ShareTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3export_tak_data_packageTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3padding Tff7b72-Tff7b72>
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3paddingTb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TakServerSectionTb4b4b4(
Te6edf3isTakServerEnabled Tff7b72= Te6edf3isTakServerEnabledTb4b4b4,
Te6edf3onEnabledChange Tff7b72= Tb4b4b4{ Te6edf3takPrefsTb4b4b4.Te6edf3setTakServerEnabledTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onExport Tff7b72= Tb4b4b4{ Te6edf3exportLauncherTb4b4b4(Ta5d6ff"Ta5d6ffMeshtastic_TAK_Server.zipTa5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3TakMeshTestCardTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/** Stateless TAK server enable/disable section β previewable without DI. */
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTakServerSectionTb4b4b4(Te6edf3isTakServerEnabledTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3onEnabledChangeTb4b4b4: Tb4b4b4(Tffa657BooleanTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onExportTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Te6edf3TitledCardTb4b4b4(Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_sectionTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3SwitchPreferenceTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_enabledTb4b4b4)Tb4b4b4,
Te6edf3summary Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_enabled_descTb4b4b4)Tb4b4b4,
Te6edf3checked Tff7b72= Te6edf3isTakServerEnabledTb4b4b4,
Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Te6edf3onEnabledChangeTb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3isTakServerEnabledTb4b4b4) Tb4b4b4{
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3export_tak_data_packageTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_export_data_package_descTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onExportTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ShareTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3export_tak_data_packageTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// ββ Debug-only TAK Mesh Test Card ββββββββββββββββββββββββββββββββββββββββββββ
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffTakMeshTestCardTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3buildConfigTb4b4b4: Te6edf3BuildConfigProvider Tff7b72= Te6edf3koinInjectTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3buildConfigTb4b4b4.Te6edf3isDebugTb4b4b4) Tff7b72return
Tff7b72val Te6edf3commandSenderTb4b4b4: Te6edf3CommandSender Tff7b72= Te6edf3koinInjectTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3testRunner Tff7b72= Te6edf3remember Tb4b4b4{ Te6edf3TakMeshTestRunnerTb4b4b4(Te6edf3commandSenderTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3results Tff7b72by Te6edf3testRunnerTb4b4b4.Te6edf3resultsTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isRunning Tff7b72by Te6edf3testRunnerTb4b4b4.Te6edf3isRunningTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3currentFixture Tff7b72by Te6edf3testRunnerTb4b4b4.Te6edf3currentFixtureTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3scope Tff7b72= Te6edf3rememberCoroutineScopeTb4b4b4(Tb4b4b4)
Te6edf3TakMeshTestCardContentTb4b4b4(
Te6edf3results Tff7b72= Te6edf3resultsTb4b4b4,
Te6edf3isRunning Tff7b72= Te6edf3isRunningTb4b4b4,
Te6edf3currentFixture Tff7b72= Te6edf3currentFixtureTb4b4b4,
Te6edf3fixtureCount Tff7b72= Te6edf3TakMeshTestRunnerTb4b4b4.Te6edf3FIXTURE_NAMESTb4b4b4.Te6edf3sizeTb4b4b4,
Te6edf3onRunTests Tff7b72= Tb4b4b4{ Te6edf3scopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3testRunnerTb4b4b4.Te6edf3runAllTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e/** Stateless TAK test results card β previewable without DI. */
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTakMeshTestCardContentTb4b4b4(
Te6edf3resultsTb4b4b4: Te6edf3ListTff7b72<Te6edf3TakTestResultTff7b72>Tb4b4b4,
Te6edf3isRunningTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3currentFixtureTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3fixtureCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3onRunTestsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3loadingLabel Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_loadingTb4b4b4)
Tff7b72val Te6edf3passed Tff7b72= Te6edf3resultsTb4b4b4.Te6edf3count Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3passed Tb4b4b4}
Tff7b72val Te6edf3failed Tff7b72= Te6edf3resultsTb4b4b4.Te6edf3count Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3passed Tb4b4b4}
Te6edf3TitledCardTb4b4b4(Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_card_titleTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3isRunningTb4b4b4) Tb4b4b4{
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_runningTb4b4b4, Te6edf3currentFixture Tff7b72?: Te6edf3loadingLabelTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_idleTb4b4b4, Te6edf3fixtureCountTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3resultsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Te6edf3stringResourceTb4b4b4(
Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_resultsTb4b4b4,
Te6edf3passedTb4b4b4,
Te6edf3failedTb4b4b4,
Te6edf3resultsTb4b4b4.Te6edf3sizeTb4b4b4,
Te6edf3fixtureCountTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3failed Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3error
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isRunningTb4b4b4) Tb4b4b4{
Te6edf3CircularProgressIndicatorTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onRunTestsTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PlayArrowTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_runTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// Results list
Tff7b72for Tb4b4b4(Te6edf3result Tff7b72in Te6edf3resultsTb4b4b4) Tb4b4b4{
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3resultTb4b4b4.Te6edf3fixtureNameTb4b4b4.Te6edf3removeSuffixTb4b4b4(Ta5d6ff"Ta5d6ff.xmlTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3resultTb4b4b4.Te6edf3passedTb4b4b4) Tb4b4b4{
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_result_bytesTb4b4b4, Te6edf3resultTb4b4b4.Te6edf3compressedBytesTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3resultTb4b4b4.Te6edf3error Tff7b72?: Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_result_unknown_errorTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72= Tff7b72if Tb4b4b4(Te6edf3resultTb4b4b4.Te6edf3passedTb4b4b4) Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary Tff7b72else Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3errorTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.16s